
// 在方法执行之前/之后执行一些额外逻辑
// 如果是方法装饰器则拥有3个参数: 类的原型对象 被装饰的方法名 属性描述符

function logBeforeAndAfter(target, propertyName, descriptor) {
  const value = descriptor.value // 保存原方法
  descriptor.value =function(...args){ // 重写方法
    // 在原方法执行前做一些操作
    console.log('在原方法执行前做一些操作')
    const result = value(...args) // 调用原始方法 并获取返回值
    // 在原方法执行后做一些操作
    console.log('在原方法执行后做一些操作')

    return result // 将原方法返回值返回出去
  }
}

class Example {
  @logBeforeAndAfter
  someMethod() {
    console.log('方法中的逻辑')
  }
}

(new Example()).someMethod()

export {}
